package com.woniuxy.rabbitmq.ack;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author: 15489  <br/>
 * Date: 2022/4/2:14:09  <br/>
 * Description:
 */

public class AckCustomer {
    public static void main(String[] args) throws IOException, TimeoutException {
//        1:工厂
        ConnectionFactory factory=new ConnectionFactory();
//       2:参数
        factory.setHost("192.168.58.128"); //ip
        factory.setPort(5672);             //端口
        factory.setUsername("admin");       //账号
        factory.setPassword("admin");       //密码
        factory.setVirtualHost("/test");   // 虚拟机名字
//        3：创建连接
        Connection connection = factory.newConnection();
//        4:创建一个通道
        Channel channel = connection.createChannel();
        channel.basicQos(1);
//        5:声明或连接消息队列
        channel.queueDeclare("aaa",true,false,false,null);
//        6:创建rabbitmq的 消费对象 接受消息
        Consumer consumer=new DefaultConsumer(channel){
            //            接受处理消息的方法
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                try {
                    Thread.sleep(1000);
                    System.out.println("消费者"+new String(body));
                    //                手动确认消息
//                    参数一 当前消息的tag（id）
//                    参数二 是否批量确认比该id小的所有 消息 （针对预取值大于1的情况）
//                    channel.basicAck(envelope.getDeliveryTag(),false);

//                    手动拒绝消息
//                    参数一 消息的id
//                    参数二 是否批量拒绝
//                    参数三 是否让被拒绝的消息重新放入队列 true重新放入 队列 true 重新放入 false 丢掉消息
//
                    channel.basicNack(envelope.getDeliveryTag(), false,false);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
//        7:接受消息
//        参数一 消息队列的名字
//        参数二 是否确认收到消息 如果是true表示确认 消息队列会将该消息散出 如果是false 不删除
//        参数三
        channel.basicConsume("aaa",false,consumer);
//        关闭
//        connection.close();


    }
}
